package system

import (
	"context"
	"go-admin/app/global/app"
	"gorm.io/gorm"
)

// SysRoleMenu 角色菜单关联模型
type SysRoleMenu struct {
	RoleID uint `gorm:"primaryKey;column:role_id;comment:角色ID" json:"roleId"`
	MenuID uint `gorm:"primaryKey;column:menu_id;comment:菜单ID" json:"menuId"`
}

type SysRoleMenuList []*SysRoleMenu

// TableName 设置表名
func (SysRoleMenu) TableName() string {
	return "sys_role_menu"
}

func NewSysRoleMenu() *SysRoleMenu {
	return &SysRoleMenu{}
}

// Find 查找角色菜单关联
func (m *SysRoleMenu) Find(c context.Context, funcs ...func(*gorm.DB) *gorm.DB) error {
	return app.DB().WithContext(c).Scopes(funcs...).Find(m).Error
}

// NewSysRoleMenuList 创建新的角色菜单列表实例
func NewSysRoleMenuList() SysRoleMenuList {
	return SysRoleMenuList{}
}

// IsEmpty 检查角色菜单列表是否为空
func (list SysRoleMenuList) IsEmpty() bool {
	return len(list) == 0
}

// Find 查找角色菜单列表
func (list *SysRoleMenuList) Find(c context.Context, funcs ...func(*gorm.DB) *gorm.DB) (err error) {
	err = app.DB().WithContext(c).Scopes(funcs...).Find(list).Error
	return
}

// Map 映射角色菜单列表
func (list SysRoleMenuList) Map(fn func(*SysRoleMenu) uint) []uint {
	res := make([]uint, len(list))
	for i, v := range list {
		res[i] = fn(v)
	}
	return res
}
